package cn.usts.edu.lesson07;

/**
 * 不安全的买票机制
 * 如果网络拥堵导致网络延时,会使得对于tickets的读取有问题,
 * 对于并发生的问题就是排队和上锁
 *
 * 解决方案:
 *   在方法前加上 synchronized 同步方法,锁的是this  [同步方法]
 * */

public class UnSafeBuyTickets {
    public static void main(String[] args) {
        BuyTickets buyTickets = new BuyTickets();
        new Thread(buyTickets,"小明").start();
        new Thread(buyTickets,"小红").start();
        new Thread(buyTickets,"黄牛").start();

    }
}

class  BuyTickets implements Runnable{
    // 100张票
    int tickets = 10;
    boolean flag = true;

    @Override
    public void run() {
        while (flag){
            buy();
        }
    }


    // 在方法前加上 synchronized 同步方法,锁的是this
    public  void buy(){

        if (tickets<=0){
            flag=false;
            return; // 程序到这结束
        }
        try {
            Thread.sleep(100);// 模拟网络延时,放大问题
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+tickets--);
    }
}